/*
 * Copyright 北京航空航天大学 @ 2015 版权所有
 */
package com.buaa.edu.leetcode.algorithm.tree;

/**
 * <p>
 * 判断一个二叉树是否是一个对称的二叉树 1 / \ 2 2 / \ / \ 3 4 4 3 是
 * </p>
 * 
 * @author towan
 * @email tongwenzide@163.com 2015年5月19日
 */
public class SymmetricTree {

    public boolean isSymmetric(TreeNode root) {

        return isSymmetric(root, root);
    }

    /**
     * 比较二叉树的前序遍历和对称前序遍历序列判断是否对称
     * 
     * @param root
     * @param root2
     * @return
     * @author towan 2015年5月19日
     */
    private boolean isSymmetric(TreeNode root, TreeNode root2) {
        if (root == null && root2 == null) {
            return true;
        }
        if (root == null || root2 == null) {
            return false;
        }
        // 值不等
        if (root.val != root2.val) {
            return false;
        }
        return isSymmetric(root.left, root2.right) && isSymmetric(root.right, root2.left);
    }
}
